<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>复习</title>
</head>
<body>
一、原型(prototype)
    * 原型：实现数据共享
        所有的函数都有显式原型属性(prototype)
        函数定义(创建)时就产生了原型

        执行函数定义：函数体并没有执行，只是创建一个函数对象-->this(函数对象).prototype(属性) = {}(空对象)
        执行函数：执行了函数体
    * 隐式原型(实例对象)
        函数
        new 构造函数()
    * 原型链：查找属性

二、执行上下文：
    体现在：变量和函数提升上(在变量，函数语句定义之前，就可以使用和调用)
        变量先提升，函数后提升(函数优先级高于变量：后面的是老大)
        例子：
            console.log(a); >> undefined(已经定义，如果没有定义的话会报错的)
            var a = 1;
            fn();   >> 弹出123
            function fn(){alert('123')}

    * 执行上下文
        问：a被放哪了
        1. 看a 的位置(函数体内，还是外部)

        全局执行上下文(window)  函数体外
            1. 确定全局执行上下文
            2. 预处理(收集数据)：var定义的全局变量(undefined)、this(window)、函数声明的函数(function)-->全部保存在window中去
            3. 执行

        函数执行上下文(函数体内) 函数体内
            1. 创建一个函数执行上下文
            2. 预处理(收集数据)：形参变量、var的局部变量、函数声明的函数、this、arguments(实参列表)、
            3. 执行

    * 执行上下文栈
        保存我们所有产生的执行上下文对象
栈的结构特点：后进先出
</body>
</html>